﻿Public Class IsyeriBordroHazirlama
	Inherits ProcessReport

	Dim Borc As Prim.Borc.BorcIsyeri
	Dim Rsb, Rsy As Recordset

	Public Overrides Sub GenericEvent(ByVal e As ProcessEventArgs)
		Select Case e.EventType
			Case EventType.Initialize
				Start("İşyeri Bordro Hazırlama", "İşyeri numarasını ve borç hesaplama dönemini girin.")
				AddField("@Isyeri", "nl", "", "İşyeri bilgisini girmelisiniz.")
				AddDateRange("Tarih", "nl", "19760101", YMD(Today))
			Case EventType.ValidateForm
				Tables.Clear()
				Help = "!İşyeri borcu hesaplanıyor, lütfen bekleyin..."
				Tables.Add("isyeri", Isyeri.IsyeriNoAra(Remote, Input("Isyeri")))
				Borc = Prim.Borc.HesaplaIsyeri(Remote, Input("Isyeri"), Input("Tarih1"), Input("Tarih2"), Today.Date)
				If Borc.ErrorMessage <> "" Then
					Warning(Borc.ErrorMessage)
					ResetForm()
					Return
				End If
				If Borc.Aylar.Count = 0 Then
					Warning("İşyerinin ilgili dönemlere ait borcu bulunamadı.")
					ResetForm()
					Return
				End If
				Rsb = New Recordset("bordrotar(d),bordro(s),pek(m),anapara(m),ceza(m),toplam(m)")
				Rsy = New Recordset("bordrotar(d),kimlik(s),sno(s),adi(s),pogs(n),pek(m),bordro(s),basamak(s),durum(s)")
				For Each Ay In Borc.Aylar.Values
					For Each Bordro In Ay.Bordrolar
						Rsb.AddNew()
						Rsb.SetValues("bordrotar,bordro,pek,anapara,ceza,toplam", Bordro.tarih, Bordro.tip, Bordro.pek, Bordro.anapara, Bordro.ceza, Bordro.anapara + Bordro.ceza)
						For Each Yatirim In Bordro.yatirimlar
							Rsy.AddNew()
							Rsy.SetValues("bordrotar,kimlik,sno,adi", Bordro.tarih, Yatirim.kimlik, Yatirim.sno, Yatirim.adi)
							Rsy.SetValues("pogs,pek,bordro", Yatirim.pogs, Yatirim.pek, Bordro.tip)
						Next
					Next
				Next
				Rsb.MoveFirst()
				e.Result = True
			Case EventType.ReportHeader
				Report.NoPageNumbers = True
				Report.PrintLogo()
				Report.SetColumns("", "1", "c", "")
				Report.Print("<b>SOSYAL SİGORTALAR DAİRESİ")
				Report.Print("<b>AYLIK SİGORTA PRİMLERİ BORDROSU")
				Report.SkipLine()
				'Başlık
				Report.BeginBorders()
				Report.SetColumns("", "1;1;1;4", "r;l;r;l", "-")
				Report.Print("Sicil Numarası", Tables("isyeri")("sicilno"), "Ünvanı", Tables("isyeri")("isyeriadi"))
				Report.SetColumns("", "1;4;1;1", "r;l;r;l", "-")
				Report.Print("İşyeri Adresi", "", "Telefon", "")
				Report.EndBorders()
				Report.SkipLine()
				'Bordro Bilgileri
				Report.BeginBorders()
				Report.Indent = New Padding(6)
				Report.SetColumns("", "2;3;2;2;2;2;1", "c;c;c;c;c;c;c", "--")
				Report.Print("Ait Olduğu Ay", Upper(MonthName(Month(Rsb("bordrotar")))) & " " & Year(Rsb("bordrotar")), "Bordro Türü", "Asıl", "T.S./P.O." & Trim(Tables("isyeri")("tehlike")) & "/" & Trim(Tables("isyeri")("tehlike") / 2), "Bordro Tipi", Rsb("bordro"))
				Report.Indent = New Padding(2)
				'Tutarlar
				Report.SetColumns("", "2;1;1;1;2;1;2;1;2", "m;c;c;c;m;c;m;c;m", "----")
				Report.Print("<c><rs=2>PRİME ESAS AYLIK BRÜT KAZANÇLARI TOPLAMI", "<c><rs=2>Sigortalı Sayısı", "<c><rs=2>Toplam PÖGS", "<c><cs=2>SİGORTALI HİSSESİ", "<c><cs=2>İŞVEREN HİSSESİ", "<c><cs=2>TOPLAM")
				Report.Print("<c>Prim Oranı", "<r>Prim Tutarı (TL)", "<c>Prim Oranı", "<r>Prim Tutarı (TL)", "<c>Prim Oranı", "<r>Prim Tutarı (TL)")
				Dim Pek As Decimal = Rsb("pek")
				Dim Oran1 As Double = Prim.OranIsveren(Rsb("bordrotar"), Rsb("bordro"), Tables("isyeri")("tehlike"))
				Dim Oran2 As Double = Prim.OranSigortali(Rsb("bordrotar"), Rsb("bordro"))
				Rs = Rsy.Select("bordrotar='" & YMDS(Rsb("bordrotar")) & "' and bordro='" & Rsb("bordro") & "'")
				Report.Print(Pek, Rs.Count, Rs.Sum("pogs"), Oran1, Pek * Oran1 / 100, Oran2, Pek * Oran2 / 100, Oran1 + Oran2, Pek * (Oran1 + Oran2) / 100)
				Report.SetBoundaries(9 / 13, 0)
				Report.SetColumns("", "2;2", "c;m", "----")
				Report.Print("GECİKME ZAMMI", Rsb("ceza"))
				Report.Print("TOPLAM", Rsb("anapara") + Rsb("ceza"))
				Report.ResetBoundaries()
				Report.EndBorders()
				Report.SkipLine()
				'İmza yeri
				Report.SetColumns("", "1", "c", "----")
				Report.Print("<b>Bu bordroda yazılı ve elektronik ortamda kayıtlı bilgilerin doğruluğunu ve bundan sorumluluğumu beyan ederim.")
				Report.SkipLine(3)
				Report.SetColumns("", "2;7;3", "c;c;c", "----")
				Report.Print("TARİH", "", "<w>İŞVERENİN/İŞSAHİBİNİN VEYA VEKİLİN İMZASI VE VARSA MÜHÜRÜ")
				Report.SkipLine()
				'Açıklama
				Report.SetColumns("", "1", "c", "--")
				Report.Print("<b>AÇIKLAMA")
				Report.SetColumns("", "1;70", "c;l", "----")
				Report.Indent = New Padding(0)
				Report.Print("1.  ", "<w>Bu bordro, iki nüsha olarak düzenlenir ve ödenmesi gereken primlerle birlikte bağlı bulunulan ŞUBE veya BÜRO'ya verilir.")
				Report.Print("2.  ", "<w>Bu bordro, ait olduğu ayı takip eden ayın sonuna kadarki süre içinde verilir. Süresi içinde verilmemesi halinde, Sosyal Sigortalar Yasası'nın 90. maddesinde öngörülen gecikme zammı ve faiz uygulanır.")
				Report.Print("3.  ", "<w>Bordroya kaydedilecek sigortalıların SİGORTA NUMARALARI'nın en küçüğünden büyüğüne doğru sıralı yazılması gerekmektedir.")
				Report.Print("4.  ", "<w>Çalıştırmakta olduğunuz sigortalılar arasında, Sosyal Sigortalar Dairesi'nden YAŞLILIK ÖDENEĞİ veya YAŞLILIK AYLIĞI almakta olanlar varsa, bu bordro üzerinde gösterilmeyip bunlar için ayrı bordro tanzim edilmesi gerekmektedir,")
				Report.Indent = New Padding(2)
				Report.SkipLine()
				Report.SetColumns("", "1", "c", "")
				Report.Print("<b>SİGORTALILARIN AYLIK PRİM DÖKÜMÜ")
			Case EventType.PageHeader
				Report.BeginBorders()
				Report.SetColumns("Sıra;Sigortalı No.;Kimlik No.;Adı;Soyadı;PEK (YTL);PÖGS;E/K;Pasaport No.;Düşünceler", "1;3;3;5;5;3;2;1;2;2", "c;c;c;l;l;m;r;c;c;c", "--")
			Case EventType.ReportDetail
				Dim i As Integer = 1
				Do Until Rs.EOF
					Dim Rss As Recordset = Sigortali.SnoAra(Remote, Rs("sno"))
					Report.Print(i, Rs("sno"), Rs("kimlik"), Rss("adi"), Rss("soyadi"), Rs("pek"), Rs("pogs"), Rss("cins"), "", "")
					i += 1
					Rs.MoveNext()
				Loop
				Report.EndBorders()
				Report.EndPage()
				Rsb.MoveNext()
				e.Result = Not Rsb.EOF
		End Select
	End Sub

End Class
